Shell Script Example

백업
#!/bin/bash
if [ -z $1 ]||[ -z $2 ]; then
echo usage: $0 [sourcedir] [targetdir]
else
SRCDIR=$1
DSTDIR=$2
BACKUPFILE=backup.$(date +%y%m%d%H%M%S).targ.gz
if [ -d $DSTDIR ];then tar -cvzf $DSTDIR/$BACKUPFILE $SRCDIR
else
mkdir $DSTDIR
tar -cvzf $DSTDIR/$BACKUPFILE $SRCDIR
fi
fi

celina@ubuntuserver:~/celina/shell$ cd tareddir

celina@ubuntuserver:~/celina/shell/tareddir$ ls

backup..targ.gz              backup.210730035651.targ.gz

backup.210730035448.targ.gz  backup.210730035722.targ.gz

backup.210730035609.targ.gz  backup.210730035847.targ.gz

tar
여러파일을 하나의 파일로 묶기
gzip이 나오면서 tar을 이용해서 압축+묶기 기능을 제공

주요 옵션
x: 묶음을 해제
c: 파일을 묶음
v: 묶음/해제 과정을 출력
z: gunzip을 사용(압축)
f: 파일을 지정

주로사용하는 옵션
압축 할때
$tar -cvzf [압축 후 파일 이름] [압축할 파일이나 폴더명]

압축 풀때
$tar -xvzf [압축 해제할 압축 아카이브 이름]

확장자가 .tar이면 묶기만, .tar.gz면 묶고 압축까지 된 파일이다.
로그파일 정리
로그파일 2일 이상 -> 압축
압축로그파일 중 3일 이상 -> 삭제
#!/bin/bash
LOGDIR=/var/log
GZIPDAY=1
DELDAY=2
cd $LDGDIR
echo "cd $LOGDIR"
sudo find . -type f -name '*log.?' -mtime +$GZIPDAY -exec bash -c "gzip {}" \; 2>/dev/null
sudo find . -type f -name '*.gz' -mtime +$DELDAY -exec bash -c "rm -f {}" \; 2>/dev/null
# {}
find . -type f -name ‘파일명’ -exec bash -c “명령어1; 명령어2; 명령어3; “ \;
현재디렉터리에서(.) 파일타입이 일반타입(-type f)인 이름이 ‘파일명’(-name ‘파일명’)을 찾아서(find)
각각의 파일에 bash 명령어로 명령어1, 2, 3, … 등을 실행하라(-exec bash -c)

-mtime +2
생성된후 경과 시간이 2일 지난 파일을 출력